package com.csap.framework.oauth2.open;

import com.csap.framework.extension.result.ResultParam;
import com.csap.framework.oauth2.request.RolesRequest;
import com.csap.framework.oauth2.request.RolesResponse;
import com.csap.framework.oauth2.request.UserPermissionsVo;
import com.csap.framework.oauth2.request.UserRolesRequest;
import com.csap.mybatisplus.page.Page;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;

import java.util.Map;
import java.util.Set;

/**
 * 角色开放API
 *
 * @Author ycf
 * @Date 2023/2/27 17:55
 * @Version 1.0
 */
public interface RoleOpenApi {
    /**
     * 根据openId查询用户端角色id
     *
     * @param userRolesRequest 条件
     * @return 结果
     */
    @GetMapping("userRoles/queryByOpenId")
    ResultParam<Set<Long>> queryUserRolesByOpenId(UserRolesRequest userRolesRequest);

    /**
     * 根据openId查询用户端角色名称
     *
     * @param userRolesRequest 条件
     * @return 结果
     */
    @GetMapping("userRoles/queryUserRoleNameByOpenId")
    ResultParam<String> queryUserRoleNameByOpenId(UserRolesRequest userRolesRequest);

    /**
     * 根据角色id查询角色信息 返回map
     *
     * @param ids 参数
     * @return 结果
     */
    @GetMapping("roles/findMapByIds")
    ResultParam<Map<Long, RolesResponse>> findMapByIds(@RequestParam String ids);

    /**
     * 添加用户角色信息
     *
     * @param userRolesRequest 信息
     * @return 结果
     */
    @PostMapping("userRoles/add")
    ResultParam<Boolean> addUserRoles(@RequestBody UserRolesRequest userRolesRequest);

    /**
     * 添加角色
     *
     * @param rolesModel 信息
     * @return 结果
     */
    @PostMapping("roles/add")
    ResultParam<Long> addRole(@RequestBody RolesRequest rolesModel);

    /**
     * 修改角色
     *
     * @param rolesModel 角色信息
     * @return 结果
     */
    @PutMapping("roles/update")
    ResultParam<Boolean> updateRole(@RequestBody RolesRequest rolesModel);

    /**
     * 删除角色
     *
     * @param id 角色ID
     * @return 结果
     */
    @DeleteMapping("roles/remove")
    ResultParam<Boolean> remove(@RequestParam Long id);

    /**
     * 分页查询角色
     *
     * @param rolesModel 角色信息
     * @return 结果
     */
    @GetMapping("roles/queryPage")
    ResultParam<Page<RolesResponse>> queryPage(RolesRequest rolesModel);

    /**
     * 添加用户角色权限
     *
     * @param vo 信息
     * @return 结果
     */
    @PostMapping("userPermissions/saveOrUpdate")
    ResultParam<Boolean> saveOrUpdateUserPermissions(@RequestBody UserPermissionsVo vo);
}
